package com.freemalll.common.core.utils;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.freemalll.common.core.web.page.PageDomain;
import com.freemalll.common.core.web.page.TableDataInfo;

/**
 * MyBatis-Plus 分页使用示例
 * 
 * @author freemalll
 */
public class MyBatisPlusPageExample
{
    /**
     * 在 Service 层使用 MyBatis-Plus 分页的示例
     * 
     * 示例代码：
     * 
     * @Override
     * public IPage<SysAccount> selectAccountList(SysAccount account)
     * {
     *     // 1. 创建分页对象
     *     Page<SysAccount> page = MyBatisPlusPageUtils.getPage();
     *     
     *     // 2. 执行分页查询
     *     IPage<SysAccount> result = accountMapper.selectPage(page, 
     *         new QueryWrapper<SysAccount>()
     *             .like(StringUtils.isNotEmpty(account.getAccountId()), "account_id", account.getAccountId())
     *             .like(StringUtils.isNotEmpty(account.getNickName()), "nick_name", account.getNickName())
     *             .eq(account.getStatus() != null, "status", account.getStatus())
     *     );
     *     
     *     return result;
     * }
     * 
     * 在 Controller 层使用：
     * 
     * @GetMapping("/list")
     * public TableDataInfo list(SysAccount account)
     * {
     *     startPage(); // 设置分页参数
     *     IPage<SysAccount> page = accountService.selectAccountList(account);
     *     return MyBatisPlusPageUtils.getDataTable(page);
     * }
     */
    
    /**
     * 创建分页对象
     * 
     * @param <T> 实体类型
     * @return 分页对象
     */
    public static <T> Page<T> createPage()
    {
        PageDomain pageDomain = PageDomain.getCurrentPage();
        if (pageDomain == null)
        {
            return new Page<>(1, 10);
        }
        
        Integer pageNum = pageDomain.getPageNum();
        Integer pageSize = pageDomain.getPageSize();
        
        if (pageNum == null || pageNum < 1) {
            pageNum = 1;
        }
        if (pageSize == null || pageSize < 1) {
            pageSize = 10;
        }
        if (pageSize > 1000) {
            pageSize = 1000;
        }
        
        return new Page<>(pageNum, pageSize);
    }

    /**
     * 将 MyBatis-Plus 分页结果转换为 TableDataInfo
     * 
     * @param page MyBatis-Plus 分页结果
     * @return TableDataInfo
     */
    public static <T> TableDataInfo convertToTableDataInfo(IPage<T> page)
    {
        TableDataInfo rspData = new TableDataInfo();
        rspData.setCode(200);
        rspData.setRows(page.getRecords());
        rspData.setMsg("查询成功");
        rspData.setTotal(page.getTotal());
        return rspData;
    }
}